SnykでSBOM生成してみた#2
こんにちは、こんばんは、アライアンス事業部のきだぱんです。
今年も残りわずか… 12月に入りました。アドベントカレンダーの季節です!
本記事はクラスメソッド DevOps・セキュリティ Advent Calendar 2023の12/10記事になります!
- クラスメソッド DevOps・セキュリティ Advent Calendar 2023
今回は、SnykでのSBOM生成について詳しく見ていきたいと思います。
- Snyk CLIでのSBOM生成
- BomberでSBOMの脆弱性スキャン
- SBOM Checker
SBOMとは
今回の主役であるSBOMとは一体何者なのでしょうか。
Software Bill of Materialsで、SBOMと言います。
日本語で言うと、ソフトウェア部品表です。
SBOMは、製品やソフトウェアに含まれるコンポーネントの情報(構成情報)とそのコンポーネント間の依存関係をリスト化したデータです。
食品パッケージの裏に記載されている原材料表示のように、ソフトウェアを構成する部品を一覧化したリストをイメージすると分かりやすいでしょう。
SBOMを作成・管理することで、特定のソフトウェアの構成要素に関する情報が可視化でき、ソフトウェアの構成情報管理・組み込まれているコンポーネントのライセンス管理・IT資産管理・脆弱性管理を強化することができます。
特に脆弱性管理では、新たな脆弱性が発見された場合、SBOMに書かれたコンポーネントの依存関係から影響範囲を特定でき、早期対応に繋げることができます。
また、2021年5月に発出された米国大統領令(EO14028)において、政府調達におけるSBOM活用の検討指示が明記されたことをきっかけに、米国規制当局を中心とした取引組織へのSBOM整備の義務化など、SBOMが急速に普及しつつあります。
日本でも経済産業省により産業分野ごとのSBOM導入に向けた議論や実証実験が始まるなど、普及に向けた取り組みが進んでいます。
国際取引では納入先からSBOMの提供を求められる事例の増加が今後見込まれるため、受託企業やソフトウェアベンダーはSBOMに関する知見の整理、並びにSBOM作成・共有のためのツールの選定を実施することが望まれます。
「ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導入に関する手引」(経済産業省)
こうした点から、SBOMに取り組む企業が増えています。
そんなSBOM作成~脆弱性チェックに役立つツールが、Snykです!
Snykとは
そもそもSnykとは、何なのか。
Snyk(スニーク)はデベロッパーファーストのセキュリティプラットフォームです。
Snykは、コードやオープンソースとその依存関係、コンテナやIaC(Infrastructure as a Code) における脆弱性を見つけるだけでなく、優先順位をつけて修正するためのツールです。
Gitや統合開発環境(IDE)、CI/CDパイプラインに直接組み込むことができるので、デベロッパーが簡単に使うことができます。
Snyk は、Java、.NET、JavaScript、Python、Golang、PHP、C/C++、Ruby、Scalaなど、多くの言語とツールをサポートしています。
また、Docker、Terraform、k8s、Infrastructure as Codeのファイルスキャンもサポートしています。
SBOM生成
Snykを使用することで、開発ワークフローでのSBOM作成が可能です。
Snykでは、Snyk CLIを利用してSBOMの生成が可能です。
APIでの生成方法は下記をご覧ください。
2つのSBOMフォーマット
フォーマットについても見ておきましょう。
SBOMのフォーマットは2種類です。
- SPDX
ISO/IEC JTC 1に、ISO/IEC 5962というバージョンでISO化(国際オープン標準)されたSBOMのフォーマットです。
SPDX WorkGroupが提供しています。
SPDXが標準とされているので、使用率が高いです。 -
Cyclone DX
xml/json形式の比較的軽量のSBOMフォーマットです。
アプリケーションのセキュリティの背景やサプライチェーンのコンポーネント分析に使用するために設計されており、SPDXやSWIDタグと同様の目的を果たせるよう構成されています。
SBOMの生成については下記のブログをご覧ください。↓
実際にSBOMを生成していきます。
今回は多くの脆弱性が含まれているjuice-shopのSBOMを生成します。
事前準備
- Snyk CLIのインストール
- snyk2spdxをインストール(npmが必要)
npm install snyk2spdx
-
jsonデータの加工, 整形をするjqのインストール
brew install jq
スキャン対象のフォルダに移動し、下記コマンドを実行するだけです。
$ snyk test --json | npx snyk2spdx | jq { "id": "----", "name": "----", "specVersion": "SPDX-3.0", "profile": [ "base", "--------" ], "dataLicense": "CC0-1.0", "creator": "Organization: Snyk Ltd", "documentNamespace": "spdx.org/spdxdocs/xxxx-xxx-xxxxx", "description": "Snyk test result for project in SPDX SBOM format", "vulnerabilities": [ { "id": "SNYK-xxx", "name": "SNYK-xxx", "summary": "xxxx", "details": . . . modified": "2023-12-05T16:08", "published": "2023-12-05T16:08:24" },
ファイル出力したい場合はsnyk test --json | npx snyk2spdx --output=spdx.json
を実行します。
Bomber
Bomberとは、SBOM の脆弱性をスキャンするSCA(ソフトウェア構成分析 Software Composition Analysis)ツールです。
Snyk でサポートが可能なため、Bomberを使いながらも Snyk脆弱性データベースで脆弱性情報を確認することができます。
スキャン結果はファイル出力も可能です。
# スキャンを実行します bomber scan --provider=xxx --username=xxx --token=xxx spdx-sbom.json ██▄ ▄▀▄ █▄ ▄█ ██▄ ██▀ █▀▄ █▄█ ▀▄▀ █ ▀ █ █▄█ █▄▄ █▀▄ DKFM - DevOps Kung Fu Mafia https://github.com/devops-kung-fu/bomber Version: 0.4.0 ■ Ecosystems detected: npm ■ Scanning packages for vulnerabilities... ■ Vulnerability Provider: Snyk (https://security.snyk.io) ■ Files Scanned xxxx ╭──────┬──────────────────────┬─────────┬──────────┬────────────────────────────────────┬────────╮ │ TYPE │ NAME │ VERSION │ SEVERITY │ VULNERABILITY │ EPSS % │ │ ├──────────────────────┼─────────┼──────────┼────────────────────────────────────┼────────┤ │ │ path-parse │ 1.0.5 │ MODERATE │ SNYK-JS-PATHPARSE-1077067 │ N/A │ │ ├──────────────────────┼─────────┼──────────┼────────────────────────────────────┼────────┤ │ │ npmconf │ 0.0.24 │ HIGH │ npm:npmconf:20180512 │ N/A │ │ ├──────────────────────┼─────────┼──────────┼────────────────────────────────────┼────────┤ . . │ │ │ │ │ │ N/A │ ╰──────┴──────────────────────┴─────────┴──────────┴────────────────────────────────────┴────────╯ Total vulnerabilities found: 156 ╭──────────┬───────╮ │ RATING │ COUNT │ ├──────────┼───────┤ │ CRITICAL │ 5 │ ├──────────┼───────┤ │ HIGH │ 86 │ ├──────────┼───────┤ │ MODERATE │ 36 │ ├──────────┼───────┤ │ LOW │ 11 │ ╰──────────┴───────╯ NOTES:
ファイル出力する場合は、こちらのコマンドを実行します
bomber scan --provider snyk --token $SNYK_TOKEN nodejs-goof_sbom.json --output=json > fil
SBOM Checker
SBOM Checkerは、SBOM の脆弱性をチェックする無料の Web ツールです。
Snyk のアカウントは不要で、 Snyk 脆弱性データベースで脆弱性情報を検索することができます。
SBOM チェッカーにアクセスすることで脆弱性のスキャンが可能です。
SBOM Checker ↓
今回はサンプルデータでスキャンしてみます。
スキャン後、Snyk脆弱性データベースを使用したスキャン結果がすぐ出力されます。
おわりに
今回はSnykでのSBOM生成について試してみました。
また、Snykは2023年11月7日、ServiceNow との新しい共同ソリューションとしてSBOMの脆弱性インテリジェンスを提供することが発表されました。
こちらも試してみたいですね。
Snykに関するブログも沢山展開されていますので、是非こちらもご覧ください。
この記事がどなたかのお役に立てば幸いです。
以上、きだぱんでした。